/***************************************************************************
*   Copyright (C) 2007 by Alexandre Masselot,,,   *
*   alex@alex-laptop   *
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU Library General Public License as       *
*   published by the Free Software Foundation; either version 2 of the    *
*   License, or (at your option) any later version.                       *
*                                                                         *
*   This program is distributed in the hope that it will be useful,       *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
*   GNU General Public License for more details.                          *
*                                                                         *
*   You should have received a copy of the GNU Library General Public     *
*   License along with this program; if not, write to the                 *
*   Free Software Foundation, Inc.,                                       *
*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
***************************************************************************/
#include "chargemapper.h"

namespace bol {

  ChargeMapper::ChargeMapper()
  : vector<unsigned int>()
  {
    m_charges=0;
    assign(sizeof(Pchargemask)*8, 0);
  }


  ChargeMapper::~ChargeMapper()
  {
  }

  void ChargeMapper::setCharges(Pchargemask msk){
    m_charges=msk;
    if(msk==0){
      assign(sizeof(Pchargemask), 0);
      return;
    }
    int i;
    for(i=0; !(msk & (1<<i)); i++){
    }
    int j;
    for (j=1; j<=i; j++){
      at(j)=i;
    }
    for(;j<size();j++){
      if(msk & (1<<j)){
        i=j;
      }
      at(j)=i;
    }
  }

  /**
   * 
   * @param out 
   * @param cm 
   * @return 
   */
  ostream& operator<<(ostream& out, ChargeMapper cm){
    for(int i=0; i<cm.size(); i++){
      out<<i<<"+\t->\t"<<cm[i]<<"+"<< endl;
    }
    return out;
  }
}
